home *** CD-ROM | disk | FTP | other *** search
/ Dynamic HTML Construction Kit / Dynamic HTML Construction Kit.iso / earthlink / nscomm / java40.jar / java / text / CollationElementIterator.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  2.4 KB  |  132 lines

  1. package java.text;
  2.  
  3. import java.util.Vector;
  4.  
  5. public final class CollationElementIterator {
  6.    public static final int NULLORDER = -1;
  7.    static final int UNMAPPEDCHARVALUE = 2147418112;
  8.    private DecompositionIterator text;
  9.    private int[] buffer;
  10.    private int expIndex;
  11.    private StringBuffer key = new StringBuffer(5);
  12.    private int swapOrder;
  13.    private RuleBasedCollator ordering;
  14.  
  15.    CollationElementIterator(String var1, RuleBasedCollator var2) {
  16.       if (var1.length() != 0) {
  17.          this.text = new DecompositionIterator(var1, 0, var1.length(), ((Collator)var2).getDecomposition());
  18.       }
  19.  
  20.       this.ordering = var2;
  21.    }
  22.  
  23.    public void reset() {
  24.       if (this.text != null) {
  25.          this.text.reset();
  26.       }
  27.  
  28.       this.buffer = null;
  29.       this.expIndex = 0;
  30.       this.swapOrder = 0;
  31.    }
  32.  
  33.    public int next() {
  34.       if (this.text == null) {
  35.          return -1;
  36.       } else {
  37.          if (this.buffer != null) {
  38.             if (this.expIndex < this.buffer.length) {
  39.                return this.buffer[this.expIndex++];
  40.             }
  41.  
  42.             this.buffer = null;
  43.             this.expIndex = 0;
  44.          } else if (this.swapOrder != 0) {
  45.             int var3 = this.swapOrder;
  46.             this.swapOrder = 0;
  47.             return var3;
  48.          }
  49.  
  50.          char var1 = this.text.next();
  51.          if (var1 == '\uffff') {
  52.             return -1;
  53.          } else {
  54.             int var2 = this.ordering.getUnicodeOrder(var1);
  55.             if (var2 == RuleBasedCollator.UNMAPPED) {
  56.                this.swapOrder = var1;
  57.                this.swapOrder <<= RuleBasedCollator.SECONDARYORDERSHIFT;
  58.                return 2147418112;
  59.             } else if (var2 < RuleBasedCollator.CHARINDEX) {
  60.                return var2;
  61.             } else if (var2 >= RuleBasedCollator.CONTRACTCHARINDEX) {
  62.                return this.nextContractChar(var1);
  63.             } else if (var2 >= RuleBasedCollator.EXPANDCHARINDEX) {
  64.                this.buffer = this.ordering.getExpandValueList(var1);
  65.                this.expIndex = 0;
  66.                return this.buffer[this.expIndex++];
  67.             } else {
  68.                return var2 >= RuleBasedCollator.CHARINDEX ? RuleBasedCollator.UNMAPPED : -1;
  69.             }
  70.          }
  71.       }
  72.    }
  73.  
  74.    public static final int primaryOrder(int var0) {
  75.       var0 &= -65536;
  76.       return var0 >>> RuleBasedCollator.PRIMARYORDERSHIFT;
  77.    }
  78.  
  79.    public static final short secondaryOrder(int var0) {
  80.       var0 &= 65280;
  81.       return (short)(var0 >> RuleBasedCollator.SECONDARYORDERSHIFT);
  82.    }
  83.  
  84.    public static final short tertiaryOrder(int var0) {
  85.       int var1;
  86.       return (short)(var1 = var0 & 255);
  87.    }
  88.  
  89.    private int getEntry(Vector var1, String var2) {
  90.       for(int var3 = 0; var3 < var1.size(); ++var3) {
  91.          EntryPair var4 = (EntryPair)var1.elementAt(var3);
  92.          if (var4.entryName.equals(var2)) {
  93.             return var3;
  94.          }
  95.       }
  96.  
  97.       return RuleBasedCollator.UNMAPPED;
  98.    }
  99.  
  100.    private int nextContractChar(char var1) {
  101.       Object var2 = null;
  102.       Vector var3 = this.ordering.getContractValues(var1);
  103.       int var4 = 0;
  104.       this.key.setLength(0);
  105.       this.key.append(var1);
  106.       int var5 = 0;
  107.       if ((var5 = this.getEntry(var3, this.key.toString())) != RuleBasedCollator.UNMAPPED) {
  108.          EntryPair var8 = (EntryPair)var3.elementAt(var5);
  109.          var4 = var8.value;
  110.       }
  111.  
  112.       while((var1 = this.text.next()) != '\uffff') {
  113.          this.key.append(var1);
  114.          if ((var5 = this.getEntry(var3, this.key.toString())) == RuleBasedCollator.UNMAPPED) {
  115.             var1 = this.text.previous();
  116.             break;
  117.          }
  118.  
  119.          EntryPair var9 = (EntryPair)var3.elementAt(var5);
  120.          var4 = var9.value;
  121.       }
  122.  
  123.       if (var4 - RuleBasedCollator.EXPANDCHARINDEX >= 0) {
  124.          this.buffer = this.ordering.getExpandValueList(var4 - RuleBasedCollator.EXPANDCHARINDEX);
  125.          this.expIndex = 0;
  126.          var4 = this.buffer[this.expIndex++];
  127.       }
  128.  
  129.       return var4;
  130.    }
  131. }
  132.